package com.cool.shark.config;

import com.cool.shark.mybatis.InsertUpdateTimeInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;
import java.util.List;

/**
 * @Name: MybatisConfiguration
 * @Author: 西风残叶
 * @Date: 2024/2/6 18:26
 * @TODO: Mybatis的配置类
 */
@Configuration
@ComponentScan("com.cool.shark.mapper")
@Slf4j
public class MybatisConfiguration {
    public MybatisConfiguration() {
        log.debug("加载配置类：MybatisConfiguration");
    }

    @Autowired(required = false)
    private List<SqlSessionFactory> sqlSessionFactoryList;
    /**
     * 此方法为Spring Bean的生命周期方法，用于初始化拦截器。
     * 该方法会在Spring创建Bean实例后自动调用，用于在每个SqlSessionFactory中添加InsertUpdateTimeInterceptor拦截器。
     * 该方法没有参数和返回值。
     */
    @PostConstruct
    public void addInterceptor() {
        log.debug("启动InsertUpdateTimeInterceptor拦截器");
        // 创建InsertUpdateTimeInterceptor实例
        InsertUpdateTimeInterceptor interceptor = new InsertUpdateTimeInterceptor();
        // 遍历sqlSessionFactoryList列表，并为每个SqlSessionFactory配置添加拦截器
        for (SqlSessionFactory sqlSessionFactory : sqlSessionFactoryList) {
            sqlSessionFactory.getConfiguration().addInterceptor(interceptor);
        }
    }

}